home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 June / PCWorld_2007-06_cd.bin / v cisle / tclock / tclocklight-040702-3.exe / source / property / pageformat.c < prev    next >
C/C++ Source or Header  |  2004-02-01  |  8KB  |  307 lines

  1. /*-------------------------------------------------------------
  2.   pageformat.c : "Format" page of properties
  3.   (C) Kazuto Sato 1997-2003
  4.   For the license, please read readme.txt.
  5.   
  6.   Written by Kazubon, Nanashi-san
  7. ---------------------------------------------------------------*/
  8.  
  9. #include "tcprop.h"
  10.  
  11. /* Globals */
  12.  
  13. BOOL CALLBACK PageFormatProc(HWND hDlg, UINT message,
  14.     WPARAM wParam, LPARAM lParam);
  15.  
  16. /* Statics */
  17.  
  18. static void SendPSChanged(HWND hDlg);
  19. static void OnInit(HWND hDlg);
  20. static void OnApply(HWND hDlg);
  21. static void OnLocale(HWND hDlg);
  22. static void OnCustom(HWND hDlg, BOOL bmouse);
  23. static void On12Hour(HWND hDlg);
  24. static void OnDetail(HWND hDlg);
  25. static void OnFormatCheck(HWND hDlg, WORD id);
  26.  
  27. static char m_CustomFormat[BUFSIZE_FORMAT];
  28. static BOOL m_bInit = FALSE;
  29. static BOOL m_bChanged = FALSE;
  30.  
  31. static char *m_entrydate[] = { "Year4", "Year", "Month", "MonthS",
  32.     "Day", "Weekday", "Hour", "Minute", "Second", "Kaigyo",
  33.     "AMPM", "Hour12", "Custom",  };
  34. #define ENTRY(id) m_entrydate[(id)-IDC_YEAR4]
  35.  
  36. /*------------------------------------------------
  37.    Dialog Procedure for the "Format" page
  38. --------------------------------------------------*/
  39. BOOL CALLBACK PageFormatProc(HWND hDlg, UINT message,
  40.     WPARAM wParam, LPARAM lParam)
  41. {
  42.     switch(message)
  43.     {
  44.         case WM_INITDIALOG:
  45.             OnInit(hDlg);
  46.             return TRUE;
  47.         case WM_COMMAND:
  48.         {
  49.             WORD id, code;
  50.             id = LOWORD(wParam); code = HIWORD(wParam);
  51.             switch(id)
  52.             {
  53.                 case IDC_LOCALE:
  54.                     if(code == CBN_SELCHANGE)
  55.                         OnLocale(hDlg);
  56.                     break;
  57.                 case IDC_FORMAT:
  58.                     if(code == EN_CHANGE)
  59.                         SendPSChanged(hDlg);
  60.                     break;
  61.                 case IDC_CUSTOM:
  62.                     OnCustom(hDlg, TRUE);
  63.                     break;
  64.                 case IDC_12HOUR:
  65.                     On12Hour(hDlg);
  66.                     break;
  67.                 case IDC_FORMATDETAIL:
  68.                     OnDetail(hDlg);
  69.                     break;
  70.             }
  71.             if(IDC_YEAR4 <= id && id <= IDC_AMPM)
  72.                 OnFormatCheck(hDlg, id);
  73.             return TRUE;
  74.         }
  75.         case WM_NOTIFY:
  76.             switch(((NMHDR *)lParam)->code)
  77.             {
  78.                 case PSN_APPLY: OnApply(hDlg); break;
  79.                 case PSN_HELP: MyHelp(GetParent(hDlg), "Format"); break;
  80.             }
  81.             return TRUE;
  82.     }
  83.     return FALSE;
  84. }
  85.  
  86. /*------------------------------------------------
  87.   notify parent window to enable "Apply" button
  88. --------------------------------------------------*/
  89. void SendPSChanged(HWND hDlg)
  90. {
  91.     if(m_bInit)
  92.     {
  93.         g_bApplyClock = TRUE;
  94.         m_bChanged = TRUE;
  95.         SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)(hDlg), 0);
  96.     }
  97. }
  98.  
  99. /*------------------------------------------------
  100.   Initialize the "Format" page
  101. --------------------------------------------------*/
  102. void OnInit(HWND hDlg)
  103. {
  104.     HFONT hfont;
  105.     char s[BUFSIZE_FORMAT];
  106.     int i, ilang;
  107.     
  108.     // common/tclang.c
  109.     SetDialogLanguage(hDlg, "Format", g_hfontDialog);
  110.     
  111.     hfont = (HFONT)GetStockObject(SYSTEM_FIXED_FONT);
  112.     if(hfont)
  113.         SendDlgItemMessage(hDlg, IDC_FORMAT, WM_SETFONT, (WPARAM)hfont, 0);
  114.     
  115.     // "Locale" combobox
  116.     ilang = GetMyRegLong("", "Locale", (int)GetUserDefaultLangID());
  117.     InitLocaleCombo(hDlg, IDC_LOCALE, ilang); // common/combobox.c
  118.     
  119.     InitAutoFormat(ilang); // common/autoformat.c
  120.     
  121.     // "year" -- "second"
  122.     for(i = IDC_YEAR4; i <= IDC_KAIGYO; i++)
  123.     {
  124.         CheckDlgButton(hDlg, i,
  125.             GetMyRegLong("", ENTRY(i), TRUE));
  126.     }
  127.     
  128.     if(IsDlgButtonChecked(hDlg, IDC_YEAR))
  129.         CheckRadioButton(hDlg, IDC_YEAR4, IDC_YEAR, IDC_YEAR);
  130.     if(IsDlgButtonChecked(hDlg, IDC_YEAR4))
  131.         CheckRadioButton(hDlg, IDC_YEAR4, IDC_YEAR, IDC_YEAR4);
  132.     
  133.     if(IsDlgButtonChecked(hDlg, IDC_MONTH))
  134.         CheckRadioButton(hDlg, IDC_MONTH, IDC_MONTHS, IDC_MONTH);
  135.     if(IsDlgButtonChecked(hDlg, IDC_MONTHS))
  136.         CheckRadioButton(hDlg, IDC_MONTH, IDC_MONTHS, IDC_MONTHS);
  137.     
  138.     // "Internet Time" -- "Customize format"
  139.     for(i = IDC_AMPM; i <= IDC_CUSTOM; i++)
  140.     {
  141.         CheckDlgButton(hDlg, i,
  142.             GetMyRegLong("", ENTRY(i), FALSE));
  143.     }
  144.     
  145.     GetMyRegStr("", "Format", s, BUFSIZE_FORMAT, "");
  146.     SetDlgItemText(hDlg, IDC_FORMAT, s);
  147.     
  148.     GetMyRegStr("", "CustomFormat", m_CustomFormat, BUFSIZE_FORMAT, "");
  149.     
  150.     On12Hour(hDlg);
  151.     OnCustom(hDlg, FALSE);
  152.     
  153.     m_bInit = TRUE;
  154. }
  155.  
  156. /*------------------------------------------------
  157.   Apply changes
  158. --------------------------------------------------*/
  159. void OnApply(HWND hDlg)
  160. {
  161.     char s[BUFSIZE_FORMAT];
  162.     int i;
  163.     
  164.     if(!m_bChanged) return;
  165.     m_bChanged = FALSE;
  166.     
  167.     SetMyRegLong("", "Locale",
  168.         CBGetItemData(hDlg, IDC_LOCALE, CBGetCurSel(hDlg, IDC_LOCALE)));
  169.     
  170.     for(i = IDC_YEAR4; i <= IDC_CUSTOM; i++)
  171.     {
  172.         SetMyRegLong("", ENTRY(i), IsDlgButtonChecked(hDlg, i));
  173.     }
  174.     
  175.     GetDlgItemText(hDlg, IDC_FORMAT, s, BUFSIZE_FORMAT);
  176.     SetMyRegStr("", "Format", s);
  177.     
  178.     if(IsDlgButtonChecked(hDlg, IDC_CUSTOM))
  179.     {
  180.         strcpy(m_CustomFormat, s);
  181.         SetMyRegStr("", "CustomFormat", m_CustomFormat);
  182.     }
  183. }
  184.  
  185. /*------------------------------------------------
  186.   When changed "Locale" combobox
  187. --------------------------------------------------*/
  188. void OnLocale(HWND hDlg)
  189. {
  190.     int ilang;
  191.     
  192.     ilang = CBGetItemData(hDlg, IDC_LOCALE, CBGetCurSel(hDlg, IDC_LOCALE));
  193.     InitAutoFormat(ilang);
  194.     
  195.     OnCustom(hDlg, FALSE);
  196. }
  197.  
  198. /*------------------------------------------------
  199.   "Customize format" checkbox
  200. --------------------------------------------------*/
  201. void OnCustom(HWND hDlg, BOOL bmouse)
  202. {
  203.     BOOL b;
  204.     int i;
  205.     
  206.     b = IsDlgButtonChecked(hDlg, IDC_CUSTOM);
  207.     EnableDlgItem(hDlg, IDC_FORMAT, b);
  208.     
  209.     for(i = IDC_YEAR4; i <= IDC_AMPM; i++)
  210.         EnableDlgItem(hDlg, i, !b);
  211.     
  212.     if(m_CustomFormat[0] && bmouse)
  213.     {
  214.         if(b) SetDlgItemText(hDlg, IDC_FORMAT, m_CustomFormat);
  215.         else GetDlgItemText(hDlg, IDC_FORMAT, m_CustomFormat, BUFSIZE_FORMAT);
  216.     }
  217.     
  218.     if(!b) OnFormatCheck(hDlg, 0);
  219.     
  220.     SendPSChanged(hDlg);
  221. }
  222.  
  223. /*------------------------------------------------
  224.    "12H" combobox
  225. --------------------------------------------------*/
  226. void On12Hour(HWND hDlg)
  227. {
  228.     BOOL b;
  229.     b = IsDlgButtonChecked(hDlg, IDC_12HOUR);
  230.     if(!b)
  231.     {
  232.         CheckDlgButton(hDlg, IDC_AMPM, 0);
  233.         if(!IsDlgButtonChecked(hDlg, IDC_CUSTOM))
  234.             OnFormatCheck(hDlg, 0);
  235.     }
  236.     
  237.     SendPSChanged(hDlg);
  238. }
  239.  
  240. /*------------------------------------------------
  241.    "Detail..."
  242. --------------------------------------------------*/
  243. void OnDetail(HWND hDlg)
  244. {
  245.     int r, ilang;
  246.     
  247.     ilang = CBGetItemData(hDlg, IDC_LOCALE,
  248.         CBGetCurSel(hDlg, IDC_LOCALE));
  249.     r = DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_FORMAT2),
  250.         GetParent(hDlg), DlgProcFormat2, (LPARAM)ilang);
  251.     if(r == IDOK) SendPSChanged(hDlg);
  252. }
  253.  
  254. /*------------------------------------------------
  255.   When clicked "year" -- "am/pm"
  256. --------------------------------------------------*/
  257. void OnFormatCheck(HWND hDlg, WORD id)
  258. {
  259.     char s[BUFSIZE_FORMAT];
  260.     int parts[15];
  261.     int i;
  262.     
  263.     for(i = IDC_YEAR4; i <= IDC_AMPM; i++)
  264.     {
  265.         parts[i-IDC_YEAR4] = IsDlgButtonChecked(hDlg, i);
  266.     }
  267.     
  268.     if(id == IDC_YEAR4 || id == IDC_YEAR)
  269.     {
  270.         if(id == IDC_YEAR4 && parts[PART_YEAR4])
  271.         {
  272.             CheckRadioButton(hDlg, IDC_YEAR4, IDC_YEAR, IDC_YEAR4);
  273.             parts[PART_YEAR] = FALSE;
  274.         }
  275.         if(id == IDC_YEAR && parts[PART_YEAR])
  276.         {
  277.             CheckRadioButton(hDlg, IDC_YEAR4, IDC_YEAR, IDC_YEAR);
  278.             parts[PART_YEAR4] = FALSE;
  279.         }
  280.     }
  281.     
  282.     if(id == IDC_MONTH || id == IDC_MONTHS)
  283.     {
  284.         if(id == IDC_MONTH && parts[PART_MONTH])
  285.         {
  286.             CheckRadioButton(hDlg, IDC_MONTH, IDC_MONTHS, IDC_MONTH);
  287.             parts[PART_MONTHS] = FALSE;
  288.         }
  289.         if(id == IDC_MONTHS && parts[PART_MONTHS])
  290.         {
  291.             CheckRadioButton(hDlg, IDC_MONTH, IDC_MONTHS, IDC_MONTHS);
  292.             parts[PART_MONTH] = FALSE;
  293.         }
  294.     }
  295.     
  296.     if(id == IDC_AMPM)
  297.     {
  298.         CheckDlgButton(hDlg, IDC_12HOUR, 1);
  299.         On12Hour(hDlg);
  300.     }
  301.     
  302.     AutoFormat(s, parts); // common/autoformat.c
  303.     SetDlgItemText(hDlg, IDC_FORMAT, s);
  304.     SendPSChanged(hDlg);
  305. }
  306.  
  307.